package fr.musique.dao;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import fr.musique.bean.Musique;
import fr.musique.itf.MusiqueItf;

@Repository("musiqueDao")
@Transactional
public class MusiqueDaoImpl extends HibernateDaoSupport implements MusiqueItf {

	@Autowired
	public MusiqueDaoImpl(
			@Qualifier("sessionFactory") SessionFactory sessionFactory) {
		super.setSessionFactory(sessionFactory);
	}

	// Permet de récupérer une musique de la base de données en fonction de son
	// id
	@Override
	public Musique get(int id) {
		return (Musique) getHibernateTemplate().get(Musique.class, id);
	}

	// Permet de récupérer toutes les musiques de la base de données
	@Override
	@Transactional
	@SuppressWarnings("unchecked")
	public List<Musique> getAll() {
		return getHibernateTemplate().find("from Musique");
	}

	// Permet de récupérer toutes les musiques de la base de données ayant pour
	// nom "titre"
	@SuppressWarnings("unchecked")
	@Override
	@Transactional
	public List<Musique> getMusique(String titre) {
		return (List<Musique>) getHibernateTemplate().find(
				"from Musique where titre=" + "'" + titre + "'");
	}

	// Permet de sauvegarder la musique dans la base de données
	@Override
	@Transactional
	public void save(Musique mus) {
		// Sauvegarde
		getHibernateTemplate().saveOrUpdate(mus);
	}

	// Permet de supprimer la musique de la base de données
	@Override
	@Transactional
	public void remove(int id) {
		Object record = getHibernateTemplate().load(Musique.class, id);
		getHibernateTemplate().delete(record);
	}

}
